moving unit dependency to implementation section of the unit and then using Pointer or TObject type for argument is a bad idea in my opinion.
First, TObject type does not say much about type of argument, so you will have to deduce what kind of argument is expected every time you insert a call to that method somewhere or remember it so you should have a good memory or you can put a comment like // pass only TSpecificType here
Well, it's unsafe
Second reason not to do this, and probably more important: FreePascal compiler sometimes has problems with units referencing each other, so it might start throwing runtime errors. It happened to me. I had project containing about 20 units in total, and some of them referenced each other in implementation forming some kind of circle. At some point FPC refused to compile it. Not sure if it was fixed later. I decided to eliminate circular references completely at that time, however there was another option: I noticed that if I clear build files each time, it could still compile my project, but I decided not to rely on it since it still could stop working completely at some point and also if you always clear compiled files they take more time to compile; well you get the idea