A gentle warning: different Linux distros handle UDEV "remove" differently, and incompatibly, so few people actually use this message it's not well tested (try shipping code for a device that DOES need it!).
Debian was a particular problem until they switched to SystemD (which I think is possibly the only udevdaemon that gets it right) - even so some distros (Ubuntu I'm looking at you) screwed up starting the udevdaemon before they mounted root writable meaning that scripts run from it couldn't really do anything useful
Fortunately most distros are switching to SystemD so this will likely work in most places
BTW - a clue for budding writers of UDEV scripts - you can't run daemons directly (udevdaemon will kill them when the scripts that started them exit) - you can use "at now" (after you install at of course) to start a secondary script that will be allowed to start your daemon for you
(that way you can write code that works with all init systems, largely by avoiding them)
I maintain a fork of Upstart that I call startup. It integrates with udev (or busybox's uevent, or any other event source) so you can start daemons based on device events and then supervise those daemons. systemd has something similar where you can place a SYSTEMD_WANTS stanza in a udev rule and it will pull in a systemd unit, but I really dislike that model because it is hard to discover the policy that led to a unit being activated. With startup/Upstart, the policy is in the job configuration itself.
Debian was a particular problem until they switched to SystemD (which I think is possibly the only udevdaemon that gets it right) - even so some distros (Ubuntu I'm looking at you) screwed up starting the udevdaemon before they mounted root writable meaning that scripts run from it couldn't really do anything useful
Fortunately most distros are switching to SystemD so this will likely work in most places