It seems to me that you guys are drawing this out longer than it has to be. If all you want is the Pokemon to be uncatchable then just do this:
-First, find the place in RAM that holds the current wild Pokemon's catch rate and find at what place it stores that data into a register.
-Then make a check right before the game calculates the catch rate for a certain address that isn't used for anything that you can use to see whether or not this battle is of the uncatchable type.
-If that variable IS set then jump to a custom routine that sets the temporary catch rate to 0 and stores the original catch rate into another unused variable.
-Then make another jump after the catch rate calculation that sets the temporary catch rate back to the original catch rate.
-Then make two more routines, one to set the uncatchable variable and another to clear it. Then use those routines in a script before and after an important wild Pokemon battle. Tada! You don't even have to touch the Ghost Marowak ASM.
It was late at night when I wrote this so if I missed something please tell me. Also, if the game doesn't store the catch rate into a temporary location (which is doubtful that they wouldn't) then doing this would be alot harder ,but not impossible.