Don't get stuff just for the sake of getting stuff. In our house we purge the toy collection before every birthday and Christmas. Now we focus on getting things that will not be outgrown quickly.
We like to get useful stuff...bed sheets, a new lamp, Christmas pajamas, a potty seat/chair, big kid dishes/cups/silverware, bath towel and washcloth, new night light, a new car seat cover. You can wrap up baby shampoo, lotion, toothpaste, a box of his favorite crackers.
We also like magazine subscriptions.
You could give a contribution toward a bigger future purchase: a swingset, college fund, savings bond.
You could get something he will not outgrow for several years and can be equally enjoyed by younger siblings in the future...a tire swing, a sandbox, a good set of blocks, a nice picture book series, a train table, a tricycle.
You could get new toy storage boxes/bins.
He's a little young for it now, but maybe the year after next you could go with a subscription to an educational website like starfall.com.
Books on CD are awesome. My kids started listening around 2yrs old. Now at 4 and 5 they like to follow along in the books. They are excellent in the car or on afternoons they don't want to nap but need quiet time.
Fridge phonics also lasted a long time for us and are more than just junky toys.
By far the best gift we ever got, and used to death, was our zoo membership.