Ok, I found the solution that satisfies me:
FocusManager(focusManager).mx_internal::lastFocus = null;
It's not perfect as it uses mx_internal namespace property which can be changed in future sdk releases.
This solution works because focus is restored by FocusManager on windows activation(nice code with commented out lines...):
private function activateWindowHandler(event:Event):void
{
// var target:InteractiveObject = InteractiveObject(event.target);
// trace("FM " + this + " activateWindowHandler ", _lastFocus);
windowActivated = true;
if (activated)
{
dispatchEvent(new FlexEvent(FlexEvent.FLEX_WINDOW_ACTIVATE));
// restore focus if this focus manager had last focus
if (_lastFocus && !browserMode)
_lastFocus.setFocus();
lastAction = "ACTIVATE";
}
}
Unfortunately is not a part of focusIn
handler stack trace, so it took time to find who is restoring focus on windows activation.