Ryan, what I see the major difference being between what ngResource does and what you and I have done is to assign a then property to the underlying value of the resource/model.
I think an additional difference in the hack I'm presenting is that I *remove* the .then property from the array/object when the pending operation completes. This has the effect of transforming the array/object from a duck-typed promise (something with a then() method) into a simple json object.
When the next asynchronous operation needs to be performed, a 'then' property is re-added that corresponds to the promise of the new asynchronous operation.
One cool side-effect is that this means that you can easily make sure that you are not performing two asynchronous operations on the same data at the same time by wrapping any methods that issue asynchronous operations in a $q.when().then() callback so that these operations get chained in the order in which they were requested.