Haskell, 2828 23 bytes
f(x:y:z)=x==y&&f|x==y=f z f z=z==[]f[]=1 Very straightforward. Double speak is only empty or a repeated character prepended to double speak.
Less straightforward now. Outputs via presence or absence of an error, per meta consensus; no error means double speak. Pattern matching fails when the first two characters differ or when there are an odd number of characters. Thanks to Laikoni for these savings!