1. There is no "best" practice as this depends on why you made the initial decision to perform multiple inheritance and then later the decision which led you to change the design. Best practice would be having implemented this in the desired way the first time, but reality means design requirements often change.
2. Yes. Another alternative though is that you can still use inheritance, but overload the methods. Again, hard to know without understanding the full design (is A abstract? do all subclasses of A really require the method in question? is the implementation the same? similar? ...)
3. Other than Copy/Paste, Find & replace (ctrl-F), etc. not really. The Code Comparisson tool may come in handy here if they are "similar" enough.
4. Again, not sure what the source of the change is, so hard to generalize this.