You could leverage hash functions which are built off of the sponge construction, to serve as both a randomness extractor & entropy pool, simultaneously. The sha3-512 standardized hash function would be suitable, as it offers various strengths, including always producing bits that appear random & statistically-independent of the input data's bit distribution. This shifts the focus from how to produce near-uniform output from a non-uniform source (a rigorously solved problem), to how to make the output as difficult to reproduce as you'd like.
Think of the sha3-512 function as an object that maintains a 1600-bit entropy pool. The object can be updated with as many bits as desired, & a unique 512-bit pseudo-random output can be obtained after each update of the object. The entropy pool for the object starts off with zero bits of entropy, & each time the object is updated with new bits of some entropy distribution, the entropy pool's entropy increases proportionally. But how many bits need to be fed into the object to achieve a sufficient amount of entropy? There's a way to work that out.
If $badrand()$ produces bits
1 with probability 0.9 and 0 with probability 0.1
then we can use the formula
$\sum_{i=0}^{1} $ $Pr(c_{i})$ $⋅$ $log_2($$\frac{1}{Pr(c_{i})}$$)$
where $c_{0} = 0$, $c_{1} = 1$, and $Pr(x)$ gives the probability of $x$ occurring, to calculate
$Pr(c_{0})$ $⋅$ $log_2($$\frac{1}{Pr(c_{0})}$$)$ $+$ $Pr(c_{1})$ $⋅$ $log_2($$\frac{1}{Pr(c_{1})}$$)$ $=$ $0.46899559358928133$
as the amount of entropy (in bits) each call to $badrand()$ can be expected to produce on average.
But, as the above answers describe, the minimum entropy
$H_{min} = -log(0.9) = 0.15200309344504997$
is the value that should be used for various reasons (page 10).
If $N$ is the amount of entropy (in bits) you wish to fill the pool with, and we use $B = 2^{H_{min}}$ as a logarithmic base, then the number of calls to $badrand()$ you'd need to initialize the object is
$N_B = log_B(2^N)$
Once the object is initialized, you then have a forward secret pseudo-random number generator that produces bits in 512-bit chunks that are indistinguishable from random, contains entropy $≈ N$, & increases in entropy each time it's updated with additional entropic material. After you've consumed the first 512-bit output, feed at least another $bitrate = 576$ number of bits from $badrand()$ to the object before reading each subsequent output. This causes the internal state to be permuted using its $f$-function.