As with all "Best practices" and "Design Patterns" it depends what you want to do. Every choice you make has trade offs. It is good to understand those trade offs and make the decision to act accordingly with what you need to develop.
Your question is so open ended; I might be able to write a book without answering.
A few thoughts on your bullet points:
I stumbled across lots of software written in Air/Flex with nearly infinity global vars :-)
This is a common approach when using the Cairngorm framework which makes use of a ModelLocator. In many apps the ModelLocator turns into one big global Value Object used everywhere in the app. I talk about how I deal with this blog post: http://www.jeffryhouser.com/index.cfm/2008/3/27/Learning-Cairngorm-Part-6-Dealing-with-the-Singleton
Most of the software I saw was not object-oriented
Despite all the interest about Object Oriented programming, I've never seen any project architecture take a Object Oriented Approach, academically speaking. At best I would call all development a hybrid between Object Oriented concepts and procedural concepts. Many folks I've spoken to seem to claim that any use of encapsulation is OO; while not using encapsulation is procedural. That is, of course, ridiculous
When building Flex Components, you'll be writing a lot of code in the Flex Component LifeCycle methods (createChildren(), commitProperties(), measure(), and updateDisplayList() ); but you probably won't be creating your own object orient architecture.
How can I pack the asynchronous method calls nicely?
I'm not sure what you mean by pack in this context.