I'll be interested to see if that works.
If I'm understanding the docs you quote, it could be simpler than that as long as you don't need a user to be both at exactly the same time. If AD calls getObject('modActiveDirectoryUser', 12) and your other code calls getObject('extUser', 12), they might both get the same user object. They'd also both get their own related "profile" when calling $user->getOne('Whatever').
If you *do* need the user to be both in the same code, you could always call getObject() twice and have both objects.
A key question is whether getObject('extUser') would retrieve objects with the modActiveDirectoryUser class_key. It might, since both extend modUser. It's worth checking, and should be easy for you since you have both packages installed. I guess another key question is: if you leave the class_key as modUser, would something like this work:
$user = modx->getObject('modUser', array('username' => 'bobray'));
$user->set->('class_key','extUser');
$fields = $user->getOne('Data'); /* (extUser extended fields alias) */
Another way to go that would definitely work would be to have modActiveDirectoryUser extend extUser or vice versa. (I think I'd do the vice versa.) The resulting object should have both related objects with all their fields. As long as both packages are registered in extension_packages (or the new equivalent -- have a record in the modx_extension_packages table), they'd both be loaded at all times and any code you wrote should work with them.
So your easiest fix, imo, would be:
1. Leave your schemas and class files alone except for having extUser extend modActiveDirectoryUser
2. Set the class_key to extUser when you create a new user (and set it for all existing users).
The ActiveDirectory code can still call getObject('modActiveDirectgoryUser') since all the users are in a class descended from that and will have its related object(s),. All your other code will have extUsers to deal with and should work fine.