この質問の文脈で発見されると、この一見一貫性のない動作は、F#2.0とF#3.0RCの両方で次のように再現できます。
type Heterogeneous =
    static member Echo([<ParamArray>] args: Object[]) = args
type Generic =  
    static member Echo<'T>([<ParamArray>] args: 'T[]) = args
使用法:戻り値:
Heterogeneous.Echo 0              // [|0|]                OK
Generic.Echo 0                    // [|0|]                OK
Heterogeneous.Echo (0,1)          // [|0; 1|]             OK
Generic.Echo (0,1)                // [|0; 1|]             OK
Heterogeneous.Echo [|0|]          // [|[|0|]|]            OK?
Generic.Echo [|0|]                // [|0|]                OOPS!!
Heterogeneous.Echo ([|0|],[|1|])) // [|[|0|]; [|1|]|]     OK
Generic.Echo ([|0|],[|1|]))       // [|[|0|]; [|1|]|]     OK
観察された動作がバグなのか機能なのかを誰かが説明できますか?
更新:
この関連する回答は、F#開発チームからの確認を伝えており、現在、ParamArray属性を持つ汎用型引数の処理にバグがあります。