The destructor should only release unmanaged resources that your object holds on to, and it should not reference other objects. If you have only managed references you do not need to (and should not) implement a destructor. You want this only for handling unmanaged resources. Because there is some cost to having a destructor, you ought to implement this only on methods that consume valuable, unmanaged resources.
The article doesn't go into this in more depth, but what sorts of costs are involved with using a destructor in C#?
Note: I know about the GC and the fact the destructor isn't called at reliable times, that all aside, is there anything else?