Implementing action correctly

do_action() does not use a returned value. It works more like the onload event in JavaScript: You cannot undo the load. To change a value you need filters.

If you want to change the option content, hook into pre_update_option_{$option_name} very late (with a high priority parameter):

add_filter( 'pre_update_option_myp_settings', 'myp_settings_et_validate', 100, 3 );

function myp_settings_et_validate( $option, $newvalue, $oldvalue )
{
    # do something awesome and return a value
}