Recently I had the same problem, but customer also wanted to be able to configure this on his own.
So I've created table for mapping of default values to a page type - so that covered second part of the request. For populating those values I've implemented custom macro and entered it as default value to the base page type. Custom macro looks like this:
[MacroMethod(typeof(string), "Get default value for the given field.", 1)]
[MacroMethodParam(0, "ColumnName", typeof(string), "Column name")]
public static object GetDefaultValue(EvaluationContext context, params object[] parameters)
{
string columnName = ValidationHelper.GetString(parameters[0], String.Empty);
if (!string.IsNullOrEmpty(columnName) && DocumentContext.EditedDocument != null)
{
DataSet dataSet = CacheHelper.Cache(cs => GetDocumentDefaultFields(DocumentContext.EditedDocument.ClassName, cs),
new CacheSettings(60, string.Format("{0}|{1}", "documenttypedefaultfield", DocumentContext.EditedDocument.ClassName)));
if (!DataHelper.DataSourceIsEmpty(dataSet))
{
return dataSet.Tables[0].Rows[0][columnName];
}
}
return null;
}