CanJS has a model store that does exactly this. Any model instance that is bound to (live binding) will be put in the model store. If a findAll or findOne call updates the data for that instance (same type, same id) then the model in the store is updated which triggers live binding.
You can see an example here: http://jsfiddle.net/7BCth/
Then you just need to store JSON data and when you resolve the deferred in your findAll or findOne call, the model store should take care of updating things for you.