The problem with giving money (or gift cards) for gifts is that people know how much you've spent.
Example: I do my shopping all year long, and am really good at coming up with nice gift ideas that cost virtually nothing. If you keep your eyes open, you can find brand new things at thrift stores or garage sales, and pay just a few cents or dollars. I keep a list of everything, and where I stashed it (attic or garage) and at Christmas time, it's just a matter of shopping my stored things.
Yesterday I went to a party and we were supposed to bring an unwrapped gift to give to Toys for Tots. Well, let's just say I haven't worked (or received pay for the jobs I did do) in a couple of weeks (and am down to one job a week, instead of five days of good-paying work). Anyway, I was going to go to the Dollar Store and try to be proud of some little cheapie thing from there that I would be able to afford and give.
But yesterday, just an hour before the party, I stumbled upon a garage sale - how many garage sales are held on a Sunday?! At this sale, it was put on by a kid selling his own things, to raise $ so he could buy presents for his family. He had some brand new toys - like a Twister game still shrink-wrapped, and a Lincoln Log set in a nice metal carrying case. I bartered a little, and got both toys for $5 (plus 50c more for a pencil box to store my beadwork in). How nice for me, and how nice for a Marine's Toys for Tot's recipient!
Also, since my family is cutting back, and also most people I know don't need "things" nor do I know their taste of what they might like, sometimes we give donations to charities in their names. That way, you can donate the amount you want / can afford, and the person knows that you donated but doesn't have to know the dollar amount. They just appreciate that you donated to a cause they support.
I still like to send a little "something," though, because it's fun for the other person to have something to unwrap and hold in his hands.