Creating a custom payment method with conditional field
Themak, Nice question. This are hardcoded in core file but you can create your own field  for each payment method using buildform hook. Here is the snippet on how to do that

function custom_civicrm_buildForm($formName, &amp;$form) {
  if ($formName == 'CRM_Financial_Form_Payment' &amp;&amp; !empty($form-&gt;paymentInstrumentID)) {
    if ($form-&gt;paymentInstrumentID == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Test')) {
      $form-&gt;assign('paymentFields', array('source'));
      $form-&gt;add('text', 'source', ts('Source'));
    }
  }
}



  Note: The above snippet is not fully tested i have just created blindly, but i am 100% sure it should work