Azure provides the ability to get instance level public IP addresses (ILPIP):
https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-instance-level-public-ip/
Is there a way for each instance to determine the public IP address assigned to it?
You can use the Azure PowerShell module inside the VM to check for the ILPIP like this:
If you prefer a REST Api you can check the List Reserved IP Address call https://msdn.microsoft.com/library/azure/dn722418.aspx/