In the CBPeripheralManager documentation, the startAdvertising method receives a dictionary containing the data you would like to advertise. According to the documentation, CBPeripheralManager.startAdvertising only accepts two possible keys in its dictionary argument: CBAdvertisementDataLocalNameKey and CBAdvertisementDataServiceUUIDsKey.
However, in Apple's documentation for Turning an iOS Device into an iBeacon they suggest that you are able to pass the dictionary that is returned from CLBeaconRegion's peripheralData method. The dictionary returned from this method contains 1 key value pair with the key being named "kCBAdvDataAppleBeaconKey" and the value being the proximityUUID, major, minor, and beacon identifier.
A dump of a dictionary returned from the peripheralData method is displayed here: Dictionary Dump
My Question is: How does the PeripheralManager.startAdvertisement method receive a dictionary with key "kCBAdvDataAppleBeaconKey" and still broadcast without error if the only keys it supports are CBAdvertisementDataLocalNameKey and CBAdvertisementDataServiceUUIDsKey?
The simplest and most likely explanation is that the documentation about CBPeripheralManager.startAdvertising only accepting the two keys is inaccurate. The docs may simply never have been updated after iBeacon support was released.
On a related note, I suspect (but cannot confirm) that the method supports even more keys as private APIs. You'd have to decompile the framework binary to figure out what these are.
The reality is that it is very common for documentation to be out of sync with new features added to APIs, and even more common for documentation not to mention secret behavior that isn't publicly supported.