Badges are never directly awarded by users. They're only extremely rarely awarded by staff and that's only in special situations (Not a Robot, for example).
The only real way we have to "thank" someone is through bounties. That said, you note that it seems inappropriate to bounty this specific answer as it is outdated and the bounty will only draw attention to it. It also requires that you are willing to give up some of your own reputation to thank this person. If you are, the other option you have would be to find one of their other answers that is currently excellent and worthy of recognition and put a bounty on that question rather than this one. In your search for such an answer, please avoid voting on them all as that may look like targeted voting to our system.
In this way you can grant the user reputation without drawing attention to the outdated answer... that said... eh... you've said thank you already in a comment. While I love that you want to thank them somehow, our current system doesn't really allow for that and that's largely by design. Our system, as much as people accuse us of being a social media site, is designed primarily to recognize the content, not the people who create it. The two are very closely intertwined but not quite the same.
Now, there actually is one badge that this user may get and it's one we've had for a while. That is, the Sportsmanship badge... and the user in question doesn't have it yet. The badge description is:
Up vote 100 answers on questions where an answer of yours has a positive score.
Now, this isn't quite the same as what you're looking for but it does reward that same quality you appreciate from this user - recognizing that answers competing with yours on a question may also be of value. So, if David upvoted your answer and eventually upvotes 99 other competing answers, he'll earn this badge (assuming he's not upvoted others yet).