Default values always have the risk of being wrong (otherwise those fields wouldn’t even be necessary), and may be specially annoying when the system tries to guess them.
I like this proposal more than the original one That’s more or less what you get when you use the party_zip module but there you use a M2O field (which works great when you find what you’re looking for but sucks if you don’t). We use the module only in case the company wants to enforce the use of the zips database.
we can use the zip code value to fill other field if the country is known and if the value is unique. We can use the country zip or allow to call an external service.
we may create a module that adds a field with auto-completion from a service (like Google Maps) on creation (invisible if id >= 0).
we may create a module that validate the address through an external service (like Google Maps or UPS).
If one could set a default country, within that country, the zip code would need to be unique. But I don’t know how to set a default country, eg. when adding parties, so I have to do this manually.