I've always found it easier to add an additional property in these cases than to try to change the behavior of the json.net parser.
[JsonIgnore]
IEnumerable AvailableContactTypes {get;set;}
IEnumerable AvailableContactTypesString
{
get { return AvailableContactTypes.Select(c => c.ToString()); }
}
Of course, if you need to deserialize, you'd need a setter on that property as well.
set { AvailableContactTypes = value
.Select(c => Enum.Parse(typeof(ContactType), c) as ContactType); }