This is a really big topic-- a mini discipline unto itself really. Offers come in many shapes and sizes. Some games have a massive set of offers they can deliver, and others have only one or two. Here's some info that you'll hopefully find useful:
Let's lump your Christmas offer in with any offer that's based on a special day... we'll call these holidays offers. Obviously, they are created in order to take advantage of the holiday. Customers want to know there is a reason for a promotion. So holidays serve this purpose really well.
But you can do the same thing with pretty much any day, just by having a reason for the promotion. I'm sure you've seen things like, "This week, we're celebrating hitting 200,000 Likes on facebook." Marketers search for these kinds of milestones so that they can build "offertunities" around them. (That's not a marketing term as far as I know, I just made it up right here.)
Now, as far as how much to discount... First, just offering a discount is not really the best way to take advantage of a promotional opportunity. You'd be better off crafting special experiences, events, and items... if the game warrants such efforts.
That said creating offers is as much a craft as a science... Ultimately, it's about knowing your audience and what they like to buy. Each game gathers a unique audience so there isn't one solution for this that works best with every audience. Here are a couple considerations:
How much have you discounted in the past? Audiences get "trained" to wait for sales that match what they've seen in the past. So if you regularly do 90% discounts, you're not going to get much of a sales boost if you just do a 10% discount. On the other hand, if you've got a new game that's never had any promotions, a 10% discount is likely to be very powerful since it's the first time the discount was offered.
A common solution to this is to not really offer discounts in this sense. Instead, offer special bundles that provide the currency at no discount, but include extra bonuses such as items or secondary currencies at no extra charge. This way the currency isn't devalued but the player still is given a reason to buy.
What does your audience already own in your game? Let's say your game has a hard currency... You decided to put your hard currency on sale for a massive discount... But if you're players already have tons of hard currency in their "wallets" and don't have anything new and exciting to spend it on, they aren't going to want any more currency. In such a scenario you want to focus on creating offers that sink the currency they already have.
What has sold well in the past? What would you like players to engage with more but they haven't? Offers can be impacted by all these sorts of considerations, so there really isn't one "correct way."
I hope that gives you a bit of insight on how to think through offer design.