Свойство ViewData определено в классе ControllerBase, и вы не можете переопределить его, но вы можете сделать это:
public class CustomController : Controller {
public new CustomViewData ViewData { get; set; }
}
Но будьте осторожны, если вы обращаетесь к экземпляру CustomController, подобному этому
Controller c = myCustomControllerInstance;
CustomViewData cvd = c.ViewData;
ваш код не будет компилироваться, так как вы будете использовать реализацию свойства ViewData по умолчанию, и он вернет экземпляр ViewDataDictionary.