Might I suggest a different take, rather then use a complex topology based selection, instead implement a simple 'traffic cop' pattern. In a nutshell, this uses a temporary blob lease to ensure that only one instance (the one that gets the lock) can perform the singleton operation. If the instance that was doing the action becomes unresponsive, the lease will fail to be renewed and another instance can quickly take over processing.
I have some sample code and a write-up on my blog at: http://brentdacodemonkey.wordpress.com/2012/07/27/the-traffic-cop-pattern/