I'm undertaking the challenge of building a custom laptop, with a custom battery pack, I know that the battery pack has to communicate over an I2C/SM port on the motherboard, but I don't know how to make the bios/os recognize it. Is there a particular I2C address and a standard protocol on top of I2C for communicating battery state information? (if so, where can I find the documentation for it) Or if there is no standard, is the protocol just proprietary to the bios manufacturer and then the OS reads it from the bios or what? I will be bitbanging I2C from the microcontroller that regulates the battery so I can do whatever is needed.
Since you already know about the SMBus, why not look into the Smart Battery Data Specification or the Smart Battery Charger Specification, as this is what you'll have to simulate. Yet, this won't describe if the System Management chip has some additional features which are undocumented ;-)
There is no real standard. [Edit: I'm wrong on that - see other answer]
However, most battery are manufactured in more or less the same way: They have some I2C EEPROM chip (often an industry-standard one) that contains all the static information about the battery (model, serial number, manufacturing date, capacity, etc...), and another chip named "battery gas gauge" or "battery fuel gauge" that monitors the actual charge level and all dynamic stuff.
TI has a whole range of battery gauge chips available: http://www.ti.com/lsds/ti/power-management/battery-fuel-gauge-overview.page. Chances are the battery of your laptop contains such a chip.
So, basically, only the laptop manufacturer knows exactly how to communicate with the battery, but everything is usually based on widely available, documented, chips (well, there might also be some additional MCU with proprietary firmware that take care of extra stuff, eventually). So if you must reverse-engineer a battery, you may have some chance to actually be successful. Here is a document that provides interesting information: Battery Firmware Hacking
Now, regarding the software part: indeed, the company that makes the BIOS, based on the information provided by the laptop/battery manufacturer, includes all relevant I2C messaging in the BIOS itself and the OS asks the BIOS when it needs to know.