I think I would write a wrapper function around custom fields, something like this:
function get_post_transient( $post_ID, $meta_key, $update_function ) {
$current_value = get_post_meta( $post_ID, $meta_key, true );
if ( is_array( $current_value ) && $current_value['expiration'] < date('U') )
return $current_value['data'];
$new_value = call_user_function( $update_function, $post_ID );
update_post_meta( $post_ID, $meta_key, $new_value );
return $new_value['data'];
}
and save the meta as an array, of the form:
array(
'expiration' => //timestamp that this field exires
'data' => // all the custom data you want to save.
);
You would just need to have your update function return the same array structure. I don’t know if there’s any real benefit of this approach over using the options table through transients, but it would make more sense to me to have post meta stored in the postmeta table.