I had a CEO at my company get an Iphone 4s. He previously had a blackberry that would ring on incoming calls, but only vibreate on text / email. There is no setting for this configuration on the Iphone. So I broke down the problem. You can make the iphone Vibrate with any ringtone.. so why not just make an empty ringtone.
Here's what I did...
1. In windows make an empty WAV file using sndrec32 ((Ten seconds should do it.))
2. Convert that empty Wav into an MP# with your favorite converter. ((I user "SUPER"))
3. Use the following process stolen from e-how.
Find the ((Empty MP3)) that you want to make into a ringtone.
Right-click the song and select "Get Info."
Right-click your song again and select "Convert Selection to AAC." Wait for iTunes to convert your song. It will create a duplicate version.
Right-click the ringtone and select "Delete."
Click on the "Keep Files" button.
Find the file. It's usually in your User folder under "Music > iTunes > iTunes Music" It will have an extension of m4a.
Replace the m4a extension of your ringtone with m4r. You can either double-click slowly to rename your file, or right-click and select "Get Info" on a Mac or "Rename" on a Windows PC.
Click "Use .m4r" or the PC equivalent when the system warns you that the change may affect the use of your file.
Double-click the ringtone file. ITunes will automatically add it to your ringtones folder in your iTunes Music Library.
Connect your iPhone and sync your ringtones.
Once you have the Ring tone, Go into your settings and select your silent ringtone leaving the vibrate option enabled. This effectively Plays and vibrates, but since the ringtone is empty, it makes no noise.