Различие в использовании кода между методом расширения и статическим методом является чисто концептуальным; один относится к объекту определенного типа так же, как метод экземпляра, а другой - нет.
В таком случае я бы задал вопрос: «Имеет ли смысл рассматривать эту операцию над объектом HtmlHelper?». Это, в свою очередь, становится «имеет ли смысл рассматривать объекты HtmlHelper для выполнения этой операции?». Если бы я ответил «да» на этот вопрос, я бы счел целесообразным использовать метод расширения, независимо от того, использовал ли я объект HtmlHelper или нет. И наоборот, если бы я ответил «нет» на этот вопрос, я бы счел метод расширения опрометчивым, даже если объект HtmlHelper все-таки привык.
Анализ кода лучше выполняет анализ использования кода, чем концепции, поэтому здесь выдается предупреждение. Это несовершенно, и действительно есть другие случаи, когда игнорирование параметра является разумным (поддержание совместимости либо с предыдущей версией, либо с интерфейсом, являющимся наилучшим случаем, «зарезервированный для будущего использования», являющийся более спорным случаем).
Примечательно, что в некоторых языках (ну, C ++ для одного) вы можете не указывать имя параметра, чтобы оно означало «этот параметр есть в сигнатуре, но не будет использоваться». Мне это очень нравится, так как это правда, что вообще не использование параметра является плохим признаком, поэтому приятно иметь средство, чтобы указать, что вы были намерены в этом.
Edit:
Еще одно оправдание. Представьте, что у вас есть метод расширения для класса, который использует соответствующий объект. Теперь представьте, что вы понимаете, что можете сделать его более надежным, эффективным или иным образом «лучше» для некоторого значения «лучше», переписав таким образом, что вы больше не используете объект. Разве вам нельзя разрешить сохранить метод расширения теперь, когда вы его улучшили? Вы должны быть вынуждены остаться с нижней версией?