Немного не соглашусь с концепцией.
Я бы на вашем месте сделал все 20 свойств, но при этом применял семантичное именование. (ну т.е. не input1, а email). В данном случае вы теряете "экономию на спичках", но ваш код становится более осмысленным и читабельным.
По поводу "очистки" значений, можно как сделать функцию очистки всех полей, так и сделать подобие defaultState для всего списка полей, и просто затирать им рабочие свойства.