I'd like to prevent a single contact from having two addresses with the type 'Home' (or 'Work', etc.). Is there a CiviCRM configuration, or an extension, that provides this functionality?
The form validation in the user interface will prevent this. So there's no need to have a setting that would prevent it.
But the API does not prevent it: you can, for example, create a second Home address for a contact through the API. There is no API configuration or option to prevent this.
Thanks @Coleman for pointing this out.