Back when I used OpenBSD on my laptop and Pidgin for instant messaging, I wrote a D-Bus script to watch incoming messages and forward any to my cell phone that were received while my screen was locked. The script forwarded messages to Prowl's web API, which would forward them to my iPhone using push notifications.
The last time I switched back to a Mac desktop, I had to switch back to Adium and lost the ability to selectively forward messages. While Adium does have an event action to run an AppleScript, there's no way of passing the actual event text to the script, so it has to talk back to Adium and try to find the newest message. The only option was to generate Growl notifications for all messages and then configure Growl to forward them to Prowl. I got fed up with that pretty quickly, so I modified Adium to create a new event type for "messages received while away". That way I could have the Growl notification only on that event, so I would only get messages forwarded while away. That worked better, but it prevented me from being able to go away while still at my computer without getting a bunch of messages queued up on my phone.
a while back i wrote a half-assed growl-like notification system called "meow" that i could use on openbsd. i wrote a gaim plugin that used meow to notify me of new messages so i wouldn't have to keep switching back to the workspace it was in to see who was talking to me. but it was a perl plugin for gaim and i didn't remember how i got perl support working in the openbsd port. the port's maintainer didn't care to fix it and i could never get it working in any future releases. so without gaim notifications, i didn't really have much use for meow and it was scrapped.
recently this bothered me again so i looked into writing another plugin for gaim pidgin. i read up on its dbus support and with a quick port of ruby-dbus, i had a working ruby script listening to pidgin events via dbus and sending notifications to meow. but as it turns out, dbus is used in a lot of software these days and has its own specification for notifications (for which a notification daemon exists in openbsd's ports). i installed it and changed a few lines in my new plugin to just send the events back through dbus to the notification service: