I don't understand what you are proposing. Are you proposing a solution to fn new() -> Rc<Foo> (if so, can you please show sample code). Or are you asking "Why do you want a fn new() -> Rc<Foo> ?
Weak<Self> to the self is only relevant only if the self is stored in some Rc, and you should manage this invariant by your hand. Instead, you can refactor method which touches the weak_ref_to_self field into the method which takes self: &Rc<Self> and clone it.
What kind of data structure are you dealing with, where it makes sense to store a pointer to itself? I couldn't even find a justification for (Rc/Arc)::new_cyclic in the issue, that added it other than "C++ has it, too", which to me is usually an argument against adding something to Rust.
There are other objects using Weak<Foo> as a 'key'. When the strong count of Rc<Foo> drops to 0, in te drop handler, I want it to notify (via callback handlers) that it is safe to remove resources associated with this Weak<Foo>.