We've gotten to the point at our house that after I tuck the kids in (they are 5 and 7, but it's the 5-year-old who has the most bedtime issues), they are allowed to get up for the bathroom if they need it, but they are to do it quietly and then tuck themselves back in bed. So if your almost-4-year-old can take care of the potty on his own, you might give him the freedom to get up and go if he needs, but let him know that he'll also need to take himself back to bed when he's done.
As for water, we now keep a little bottle of water by their beds so they don't have to get up if they're thirsty--it's right there. I don't always fill it all the way, just what I think they can handle without having an accident overnight. And when the water in the bottle is gone, they have to wait until morning to refill. Just knowing that he's got the freedom to go potty or take a drink may make it less desireable if he doesn't get extra attention for it.
But the biggest breakthrough for us came from using the kitchen timer. It really helped with my daughter's getting-up-to-tell-us-things problem, because if she would just stay in bed they would sleep! (I especially hated the "I can't sleep" announcement to us in the living room... two minutes after I had just tucked her in!) I posted this yesterday for another mom, but I think it might help you too...
We got the kitchen timer out, and I told my daughter that I was setting the timer, and that she needed to stay in bed and wait for me to come back when the timer rang. The attitude was that this was a little game--could she wait quietly while I went to start the laundry or whatever, until the timer rang? I started with just 2 or 3 minutes so she could see that it wasn't so long, and I really would come back. Then I put the timer in my pocket and left the room. As soon as it rang, I went back and sat with her for a minute or two. Then I explained about setting the timer again and that I would be right back when it rang. But each time, I lengthened the time by a minute or two. Eventually, I would come back and she would be asleep.
We repeated this nightly, but each night I started the timer at an extra minute or two so she would slowly get used to waiting longer for me. It took some time, but it was relatively painless, crying-wise. And eventually I didn't need the timer any more. I could just tell her that I would be back in 15 minutes or after my shower or something like that, and she would wait in bed for me. Usually she'd be asleep by the time I returned.
If she decided to get up and not wait for me, I would take her right back and possibly start the timer over again.
Now she's 5 and when I put her to bed, she says, "don't forget to check on me later." And her room is usually quiet after that because she falls asleep pretty well now. But occasionally in the morning she asks why I didn't come back, and I just have to explain that I did, but she was asleep already and praise her for being such a big girl and going to sleep so well.
We've used the kitchen timer for lots of different things, and this one worked real well. Might work for you too. Good luck!