I just stumbled onto this and it's worked to a degree. I'd like to add my comment to this thread as I have a question too that fits in here.
He loves to retrieve but wouldn't give the ball back once he brought it to me. So I started playing with two balls and when he brought the first one to me I'd ask him to drop it. When he did, I threw the second ball. This eventually lead to him dropping the ball right as he reached me without waiting for the command. I refused to throw the ball when he did this and instructed him to sit, put the ball back in his mouth, then asked him to drop it. When he did, I threw the second ball.
The only problem I'm having now is needing two things. For example, he won't drop something unless he has a reward. Any suggestions on how to fix this? When I have a reward, he will drop anything. But if I just need him to drop something, say another dogs toy, a stick, etc... he won't drop it unless I have something else to give him.
I never thought I'd own a German Shepherd.