Aというsystemがあったとして、 このsystem中のfoo.lispが壊れていて、(load-system :a)とするとビルドができないとします。

この場合、A systemのfoo.lispを直接書き換えてしまえば修正は可能ですが、 Quicklisp等のパッケージマネージャーを利用していて、パッケージマネージャーから供給されるソースは一切変更したくなくないもの、とします。

このような場合、ASDFで処理されるソースコンポーネントを差し替えるにはどのような方法がベストでしょうか。

ちなみに、ASDFの中身を眺めてみましたが、うまい場所のフックが見付からず、asdf:performに対象のソースファイルのコンポーネントが来たら代替のものに差し替える(代替のコンポーネントは別のsystemとして定義しておく)方法位しか思い付きませんでした。

(defmethod asdf:perform :around (op (compo (Eql 壊れたソースコンポーネント)))
  (asdf:perform operation 修正したソースコンポーネント))

なにか正式な作法があれば是非知りたいです。