I think this is largely driven by the market you serve. If you are operating at the high-end in a major market like New York, Miami, LA, it is much easier to get paid up-front for your design work. If you are in a smaller market, or operating more in builder-driven projects (opposed to design/architecture-driven projects), it is considerably harder, because there is always going to be someone who will do it for free.
I will always meet with a prospect, establish a written low-detail scope of work, and provide ballpark numbers to establish budgets for free. My goal through initial meeting is to establish whether or not I'm a good fit for this project, and establish a working budget agreement with the prospect. Once we are there, then I will go to work on a fully engineered system and proposal. If my radar picks up any sense of price-shopping or I feel the prospect is wishy-washy, then I will present a design retainer fee before providing a full proposal. Fortunately, virtually all of my business for the last few years has been driven by referrals, so I feel like I would have to really screw something up to not get the project if I want it.