For laughs I wrote a bit of code to turn defined() into a multimethod. If you use the ordinary builtin on an object which has a defined() method then the result of the method is used instead.
It isn't on CPAN because I don't know a good name for it yet. I want to do the same thing to the ref() builtin. Here's a link to download it. It's not permanent so don't expect to find it there months from now.