dog.update owners: dog.owners.merge( David: "foose" )
Update
Please note that the comment in your question shows the hash keys being symbols, ie. in { "Brad": "bar" } the presence of the : will make "Brad" into the symbol :Brad in the resulting hash.
This is important because later in your question you show hash["David"] = "foose" - that's adding a new element to the hash with a string key "David"!
This is important because "David" != :David so, for example:
[11] pry(main)> x = { "David": "symbol" }
=> {:David=>"symbol"}
[12] pry(main)> x["David"] = "string"
=> "string"
[13] pry(main)> x
=> {:David=>"symbol", "David"=>"string"}
So, be careful there.
Second Update :)
All that being said, if this field is just coming out of a JSON(B) field from a DB or something then actually your keys might all be strings, in which case you should show your hash with => not : (but maybe you were showing the raw JSON).