I'd try the SuperNanny technique. (I'm assuming you have a good bedtime ritual, appropriate bedtime, sleeping space, etc.) Have a talk with him and explain why he needs to sleep in his bed. Make a sticker chart for every night he stays in his bed, and discuss what he "gets" for each sticker, etc. Put him to bed (maybe buy some fun new sheets or something) and be very positive about it. The first time he gets up, lead him back to his bed and say, "It is time to go to bed now. I love you, good night." The second time, lead him back and say "It's time for bed now." The third, (fourth, fifth, ninty-sixth) time, just lead him back to bed without speaking to him-- NO attention at all. Is it going to be painful? Yes. You've built this habit for 4 years, and it isn't going to be broken in a day. But if you are consistent, it will change. If you aren't willing to really follow through (through several sleepless nights, and lots and lots of tears), then don't even bother starting, because you'll just make it worse for yourself in the end. And make sure your husband is on the same page with you about what you are doing, because inconsistencies will set you back!
You can do this! If you are a reader (like I am), then I'd recommend Ferber's Solving Your Child's Sleep Problems.