It depends on what you need (I'm not sure about your specific requirements), but I think it should be possible for the most part.
With the reference counting GC, you can use finalizers in conjunction with GC_ref() and GC_unref() to hook into the GC process (cycles can be an issue if you create any). Use new(some_ref_var, finalizer_proc) to allocate a finalized object. I haven't looked at the M&S GC in detail, but my understanding is that the same approach should work there, too (objects with a non-zero reference count due to GC_ref() being treated like roots).
If your external memory does not contain any references to GCed memory, then finalizers on their own will be sufficient.
With the Boehm GC, no extra effort should be needed as long as you allocate C data structures with GC_malloc() and friends.