I think I heard about that in nim forum long time ago, but tested only with default gc, where destroy is not called. But with ARC it is called indeed currently, and gc_ref/unref seems to work also, so gintro and other packages using finalizers may survive.
type
O = object
i: int
R = ref O
proc `=destroy`(x: var O) =
echo "destroy"
proc main =
var r = R(i: 7)
echo r.i
GC_ref(r)
GC_unref(r)
main()
$ nim c --gc:arc t.nim
$ ./t
7
destroy
But the goal is to unify finalizers and destructors.
I'm not sure what's the best way for the transition, maybe have destroy= call the finalizer but wrap it in a since versioning block. And the new for your ref types has a since as well to not use the finalizer. But it's indeed a bit involved.