The easiest way to avoid fees is to use a credit card (like Schwab, Capital One or certain high-net-worth specialty cards) that doesn't charge a fee.
But if you really want to use a card that charges fees and you get charged a fee even though you are quoted a USD price through a US-based site like expedia or travelocity or the like, you can probably get your credit card company to refund the foreign transaction fee if you call and ask nicely--especially if it's a one time thing.
Citi, for example, had no trouble taking a fee off my card when I was charged a foreign transaction fee for reserving a bowling alley in NYC (because the bowling alley's website happened to use a Denmark-based credit card processor). The customer service rep thought it was even more ridiculous than I did.