If you are on ASP.NET MVC 4 and .NET 4.5 then you should just use the async keyword and Tasks. This should fix your issue with routing and reduce the complexity in your controllers. Here is the a link to whitepaper by microsoft.
http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4
but to sum it up your code would change to this.
public class CheckEmailController : AsyncController
{
//
// GET: /CheckEmail/
[GET("CheckEmail")]
public async Task<ActionResult> Index()
{
return View( new IndexReponse {
d = await MyAsyncEmailChecker.CheckForEmailAsync()
});
}
public class IndexResponse
{
public bool d { get; set; }
}
}