Will this prevent memory leaks if ChangeWatcher.useWeakReference is false:
changeWatcher.unwatch(); changeWatcher = null;
Yes, the host object which the ChageWatcher is referencing will be cleaned up the next time the GarbageCollector is run since you have completly removed the ChageWatcher's reference to it. However, its typically best to use weakreferences for the cases where you don't explicitly remove the watcher.
Here's a good slideshow by Grant Skinner on Flex memory/resource management: http://gskinner.com/talks/resource-management/