Это, вероятно, субъективно. Мне кажется, что реализующие классы должны генерировать любые исключения, которые естественно генерировать в данный момент. Интерфейс не объявляет, какие исключения разрешены, а какие нет. Компилятор не просматривает ваши комментарии, и класс может выдавать другие исключения и при этом оставаться допустимой реализацией вашего интерфейса.
Если по каким-то причинам вам нужны эти исключения одного типа, вы можете перехватить их и перебросить их с исходным внутренним исключением везде, где вызывается IWidgetWorker.DoWork.
Ситуация, когда workId пуст, может быть обработана до того, как вызов поступит в реализацию, поэтому нет причин, по которым разные реализации должны обрабатывать одну и ту же проверку и выбрасывание ArgumentException.
Может быть иначе в других средах программирования. Я думаю, что возможные исключения должны быть объявлены в некоторых языках, но не здесь.
В документации вашего интерфейса может быть что-то сказано о том, как интерпретируются различные исключения и что будет делать код потребления. Может быть, код потребления попытается снова через некоторый промежуток времени, если исключение такое-то и такое-то, но в других случаях прекратит сообщение об ошибке.