What I don't know what must a J2ME implementation running on a Blackberry device do to receive this 'pushed' data? I'm trying to understand some of the implementation details so that I might be able to create some sort of abstract push facility that I could use across devices/J2ME implementations.
You'll mostly be limited to devices which support something like JSR 205.
The MessageListener interface provides a mechanism for the application to be notified of incoming messages.
When an incoming message arrives, the notifyIncomingMessage() method is called. The application MUST retrieve the message using the receive() method of the MessageConnection. MessageListener should not call receive() directly. Instead, it can start a new thread which will receive the message or call another method of the application (which is outside of the listener) that will call receive().