Mobile Push Dev documentation states :
Initializing the SDK without setting the delayRegistrationUntilContactKeyIsSet flag to true in an app that will eventually associate the device users with a known identifier. The first launch of the app the SDK will send a registration to the Marketing Cloud. This will be done before it would be possible for the customer to set a contact key. Upon receiving a registration payload without a contact key, the Marketing Cloud will generate one for the device. (eg. abc123) At a point in the future (let’s say once the user logs into their account in the application) the app sets the known contact key in the registration. The device will now send a new registration payload to the Marketing Cloud, a new contact will be created and the device will become associated with the new contact.
As we need to send notifications to not-yet-registered users, we do not use delayRegistrationUntilContactKeyIsSet, so a random Contact Key is registered.
What we have witnessed is that sending our final Contact Key afterwards does not create another Contact, it seems to update the old one.
This is actually what we are looking for, so I wonder if the docs are wrong or outdated, or if the behaviour we see is not intended, and, more important if we can rely on it ?