Can I make the name of a custom Menu Item context-sensitive, or show/hide it dynamically?

Can I change singular to plural, make the word "On" turn to "Off" when appropriate, etc., for a single function?

Alternatively, dynamically including and removing menu items as various states change, would be fine. Can that be done?

As you define the name of menu items via an attribute (MenuItem), I don't see a way of changing the name of the menu dynamically. However, what you can do is have two entries and enabling/disabling them depending on context. This may not really make sense with singular / plural but it certainly makes sense for the on/off case (which is also what I'm actually using this for).

Simply use the second constructor of menu item from the documentation (this is C#, JavaScript can be found in the docs ;-) ):

// Validate the menu item.
// The item will be disabled if no transform is selected.
[MenuItem("GameObject/Do Something", true)]
static void ValidateDoSomething () {
    return Selection.activeTransform != null;

So, you need two methods: One that actually defines the functionality of your menu item (that will just use MenuItem("Name")), and another one that checks for the context (that one will use MenuItem("Name", true") and return true when the menu item should be enabled and false if it should be disabled.