Editor doesn't allow keys which start with $

This is because AngularJS stores some hidden values with the $-prefix. But it would certainly be possible to prefix all our stuff with, say, _ (so that $asdf is encoded as _$asdf) and then go back and forth between these representations. Pull requests are welcome :)
Well the only bulletproof (and relatively painless), to deal with problem in my opnion, is not use object structure as model, but create a special model for working with json. E.g after json is parsed, object is not passed into the scope, but is transformed to the following form:
{
properties:[{name:"stringProp": value:"stringValue"},
{name:"arrayProp": value:[{properties:[]},"stringItem",1] }
]
}
Such model corresponds to the following JSON
{
"stringProp":"stringValue",
"arrayProp":[{},"stringItem",1]
}
If you pass such model into scope, it doesn't matter which keys angular adds later, because you interested only in specific keys. You can use also some escaping, but i believe it is way too error prone.
What's so error prone about this: prefixing each key with a _ when reading from the text area, removing the first char (i.e. the _) when writing back from the Angular model to the textarea.
Well I think it is simply cleaner, since you don't have to always remember that correct keys should have '_' prefix (at least you have to add it in key name editor/render, may be there some other places).
But the is definitely choice is yours, I'm just suggesting since I had to do something similar in the past, tried to use escaping at first, then I said screw it, and just implemented using special model structure and in the end it was much easier.