Not quite. Finalize() is unreliable, in some cases it is not called (e.g. when exiting the application and shutting down the runtime).
If you want to call something every time reliably (aka destructor in C++) use the reliable try/finally block.
The question does not say that it needs to be run "right before GC", just "before GC". And because you cannot call any method after GC (other than fiddling with Unsafe), everything you call at any time during the program execution is called "before GC".