>
> ..or, since the original problem was that no instance variable has been
> created, just create it (in quick and dirty way):
I have not written complicated code because I wanted to write
complicated code ;)
>
> class Module
>  alias_method :orig_attr, :attr
>  def attr(symbol, writable = false)
>    orig_attr symbol, writable
>    send symbol
>  end

The idea is to have attributes and not instance variables, creating
instance variables on the fly with the attr method will not
distinguish them from other instance variables.

I reckon that the only sense I could make from the post was when OP
talked about the instance variables """created""" by the existence of
accessors.
You do that for him, I would think it is worth to distinguish them.
Also have a look at inheritance, which is not handled by your code.

Cheers
Robert

-- 
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw