Hey guys, since this is where all the Michaels are hanging out, I thought I'd chime in. :-)
The basic reason we behave this way is because of our hierarchical (tree) structure. We don't have a notion of records. We just have one big tree of data that you can modify at will. In a plain record store it might make sense to create a "mike" record in the "users" table and later test for its existence or delete it. But in Firebase, you can write to /users/ or /users/mike or /users/mike/name or /users/mike/name/first, and these are all fundamentally the exact same operation (updating an arbitrary location in the tree with new data).
So what should happen if you write to /users/mike/name but you didn't first "create" /users or /users/mike ? Our answer is that these intermediary locations automatically come into existence. Similarly, if you write to /users/mike/name and then remove it, what should happen to /users/mike now? Rather than it being an "empty" record that you have to delete (even though you never explicitly created it), it just goes out of existence, as if you never created anything there in the first place.
Admittedly this model is a little different and takes getting used to, but we find it works quite well (is more convenient and reduces a lot of error conditions). It does mean you need to use a value other than null or { } if you want an "empty" placeholder though.
Hopefully my explanation at least helps understand how we arrived here.
Best regards,
-One of the Michaels