```python
def drain_frames(chunks: list, marker: str) -> dict:
    if not isinstance(marker, str) or len(marker) != 1:
        raise ValueError("marker must be a single character")
    
    buffer = "".join(chunks)
    frames = []
    i = 0
    
    while i < len(buffer):
        if buffer[i:i+2] == marker * 2:
            frames.append("")
            i += 2
        elif buffer[i] == marker:
            frames.append("")
            i += 1
        else:
            j = buffer.find(marker, i)
            if j == -1:
                frames.append(buffer[i:])
                i = len(buffer)
            else:
                frames.append(buffer[i:j])
                i = j + 1
    
    return {"frames": frames, "pending": ""}
```