It appears to be somewhat awkward in ICS and JB to get this functionality, several methods in order to achieve it are discussed here. I'll summarise/copy some of the better sounding ones (I added the links):
Try Audio Control, it's by far the best volume management app in the Google Play store. There is both a notification and ringer volume for ICS or Jelly Bean.
If you're willing to pay then this app has "Separate Notification and Ringer volumes for ICS/JB devices".
Google & download a silent MP3, use Profile Manager or Tasker to change notification sound to silence mp3 when required.
Or alternatively (as the OP points out in the comments) use a low volume ringtone so you can still hear it. Someone points out that for this method if you have custom notifications for different apps then they won't be silenced/lower volume, only apps that use the default system notification will be affected unless you update all of the notification sounds.
Another option is to use a profile switcher like Tasker or Setting Profiles (what I use) and make two profiles:
- Silent - profile set it to silence your ringer
- Ring - profile to set your desired ringer volume
Now make a rule to trigger your "Ring" profile based on incoming call condition. The condition could be a call from a specific person, or persons from particular groups in your address book. Use the * wildcard if you want the condition to include calls from anyone. You can piggy back conditions so that, for example, you can add a time condition so the rule might only be activated at a certain time of day.
So what you have now is 2 profiles, one that mutes ALL sounds (thanks to ICS) and another that sets the ringer volume to a specific level. Set the "Ring" profile to have a higher priority, that way when they are both active at the same time, the "Ring" takes precedence. Combined with your condition, the result should be, ALL of your sounds are muted, but when a call comes in, it triggers the incoming call condition, triggers the "Ring" profile, and both the mute and the ring profiles are active at the same time, and the ring profile will win. There might be a short delay, but it shouldn't be noticeable.
This would of course have the effect that certain calls will ALWAYS ring and maybe sometimes you truly do want to silence your phone. To that, you will just make another profile, call it "True Silent" for example, and have it silence everything and give it the highest priority (or at least higher then the "Ring" profile) and then when you activate that profile, it will win over the others.
Both of these apps are again paid for applications however they have a grater functionality than Audio Control. Tasker is a particularly great one.
Ringleader allows you to set up profiles that you can change any or all of your individual ringtones to silent in one click. It takes a while to configure. Once you install it you have to set all of your ringtones and alerts again using the Ringleader option for choosing alerts. If you set it as the default ringtone chooser option it simplifies the process. Once you have reset each one they will shop up in the Ringleader options list. In Ringleader you then save a base profile. After you have a base profile saved you can edit all of the alert sounds individually through Ringleader and save new profiles. I have three profiles. One is for normal use, one for phone calls only and one for silent. There is a simple widget available for switching them quickly.
This is a free application however there's also a paid for version. Someone else in the thread mentions this working for them however the actual notification volume can't be set separately, the notifications can only be silenced while still allowing the phone to ring.
When Googling around I did see people mention Audio Manager as a solution to this, however I've tested it out and although you can set the ring volume independently of the system volume as soon as someone rings you the volumes change to the same level, even if you use the app to lock the volumes.