Ben, we've already got the notifications-via-XMPP thing going, since that's the core of our Sail platform. The only change for us in adopting this new model is that rather than packaging a lot of data into event payloads, we're keeping all the data it in the repo and forcing clients to go fetch it themselves whenever they need it. So for example in the past if a student made a journal entry, we'd send out a "new_journal_entry' event and package the content in the event's payload. Nowadays we're broadcasting out the same 'new_journal_entry' event, but with only a minimal payload (just the student's user id, for example). When an interested client/agent notices that event, it will go out and fetch the updated content.
The obvious downside is that we've split up a single message into a more complicated message-request-response combo, but in practice this should actually simplify the architecture a bit. A major problem in the past was keeping clients in sync with the current system state -- for example if a student joins a smartroom run half way through, or if a client drops out and comes back in. Previously we were sending some state updates via events/messages ("here's some new content that somebody just generated") and others via request-response ("i just joined, give me all of the content that's been generated so far"). With the new model, you're getting all of your state updates one way (REST), in the same format (packaged as data in a repository rather than message payload). The events/messages only notify you that something has changed.
We're just starting work on two big apps based on this new model. I'll let you know how it goes :)
The Firebase stuff, by the way, is cool because it (in theory) takes care of all of the state update stuff for us. Every client has complete state (a complete copy of the repo, from what I understand), so we can just assume that everyone knows about the current system state, and we can focus on coding just for the activity.