I'll second ND that the hash_behavior option of "merge" is more usable in my situation - I have hashes of information that get built up in the playbook (one piece sets defaults for a location (i.e. "North America" vs "Europe" vs "Asia"), then a later part sets defaults for different datacenters, and later a specific subnet might over-ride other settings. This way I could have all my European systems default to using settings that applied to the entire zone, but my servers in different datacenters would get settings specific there (i.e. a Git or NTP server, etc), and individual subnets might have different NTP servers but still use the datacenters' Git server.
Merging hashes was a big win for this project. Sadly, we don't have a "single source of truth", so we had to use multiple Ansible variable files to build up our "truth" and merging them with each other. Our inventories were not the source of truth with all the information needed. Without an external CMDB that could take into account the location, datacenter, and subnet (to name a few constraints), getting the data consistent would have been impossible with Ansible.
I'm not a programmer to the level that I can determine a better way to address this in Ansible, but I'm hoping someone will work through a way to merge them together and the hash merge behavior can be exposed again.