Currently we do not have a USB charging reference circuit. I know that USB charging is not an easy topic, since I am currently working on a demo system which includes a USB battery charging system. Unfortunately, there is no schematic that I can share right now. It is planned to release some schematics probably Q1 or Q2 2017. Nevertheless, I can give you some hints.
The first question you have to answer is whether you are using a single or multiple cell system. USB charger for single cells are way more common since used in almost all smartphones and tablets. In combination with our Colibri Modules, there is a major issue: The discharge voltage range of a lithium cell is from 4.2V to 3.0V (it would be possible to go down to 2.5V, but this is not so common). The Module requires 3.3V +/-5%. This means, you would actually require a buck-boost converter. A cheaper solution is using just a buck converter with high side p-channel FET with low drop out. With such a buck converter, you will be able to discharge the battery to around 3.2V. This means, more than 80% of the capacity of the battery can be used.
Laptop computers have traditionally multiple cell batteries. With the new USB-C connector, more and more laptops will also be charged by USB. Therefore, new buck-boost charger solutions are coming up. On our demo board, we are going to use the intersil ISL9237 with two lithium cells. This is quite a unique device which allows charging 1 to 3 cells with 3.2V to 23.4V input voltage range. Please keep in mind that multi-cell batteries require a cell balancer (often already built in battery packs). The advantage of the higher battery voltage is that simple buck converts for the 3.3V and 5V rail can be used.
You have already mentioned the next problem. In order to be USB compliant, you are only allowed to draw 100mA as long as the port is not enumerated. During the enumeration, the device can ask for up to 500mA. With the USB Battery Charging Specification (BC 1.2), the detection of dumb USB chargers (e.g. cell phone chargers) are now specified. These dedicated USB chargers have the D+ and D- signals shorted which indicates that higher currents can be drawn (normally around 1.5A). So, if you want to charge with more than 0.1A, there must be a mechanism for detecting whether you are plugged into a dedicated USB charger port, or a regular USB port.
One solution is using the built in charger detection mechanism in the Vybrid SoC (see the description of USB_ANALOG_USB0_CHRG_DETECT register in the reference maual). This means, the default charging current limit of the charger has to be set to 0.1A. The module needs to boot up and do either the USB enumeration for announcing 0.5A charging or detecting the dedicated charger for allowing to charge with 1.5A. The problem with this solution is that the module need to be running in order to charge with more than 0.1A. This could be an issue with a completely flat battery, since one has to wait until the battery is charged enough for booting up the module in order to start charging faster.
It is possible to built a software independent solution. There are USB charger detection IC available. For example the TI BQ24392 features a GPIO output which tells whether a dedicated charger is detected. This chip can be used in combination with a charger IC that features a fast charge enable input pin (as an example the TI BQ24266). As long as the dedection IC is not reporting a dedicated charger, it charges only with 0.1A. If a charger is detected, the limit can be set to 1.5A (or another value, depending on the charger).
There are also USB charger available with built in charger detection (for example TI BQ25890). Pay attention of the need of an analog switch for the USB signals if the USB interface is also used for communication.
I hope my answer will help you designing a suitable battery charger solution. I know it is not an easy topic. Please note, the mentioned devices are only examples, there are many other suitable solutions available. I would be very thankful if you can share your experiences and solutions with the community.