If you open System.Web.Mvc
using Reflector, you will see that there are several derived types that inherit from the abstract class ActionResult. They are:
System.Web.Mvc.ContentResult
System.Web.Mvc.EmptyResult
System.Web.Mvc.FileResult
System.Web.Mvc.FileContentResult
System.Web.Mvc.FilePathResult
System.Web.Mvc.FileStreamResult
System.Web.Mvc.HttpUnauthorizedResult
System.Web.Mvc.JavaScriptResult
System.Web.Mvc.JsonResult
System.Web.Mvc.RedirectResult
System.Web.Mvc.RedirectToRouteResult
System.Web.Mvc.ViewResultBase
System.Web.Mvc.PartialViewResult
System.Web.Mvc.ViewResult
Yes, you can roll your own by inheriting from the abstract class ActionResult. You can study one or more of the ActionResults in the list above with Reflector to get a feel for how this would be done.
The source code is also available here:
http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471